package Basics;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class KeyMap 
{
	public static KeyMap  map = null;
	
	Map<String, Atom> keyMap;
	
	
	public KeyMap () 
	{
		this.keyMap = new HashMap<String, Atom>();
	}
	
	
	public static KeyMap getInstance() 
	{
		if(map == null) 
		{
			map = new KeyMap();
		}
		
		return map;
	}
	
	
	
	public Map<String, Atom> getMap() 
	{
		return keyMap;
	}


	public void setKeyMap(Map<String, Atom> keyMap) 
	{
		this.keyMap = keyMap;
	}


	/*************************************************************************************************************/
    /** Title: Update                                                                                                                                                               
    /** Description: add new atom to keyMap                     
    /*************************************************************************************************************/
    
    public void Update (Atom atom)
    {
    	if (false == this.keyMap.containsKey(atom.toString())) 
    	{
    		this.keyMap.put(atom.toString(), atom);
    	}
    }
    
    
    /*************************************************************************************************************/
    /** Title: Values                                                                                                                                                               
    /** Description:                      
    /*************************************************************************************************************/
    
    public Collection<Atom> Values ()
    {
    	return this.keyMap.values();
    }
    
    
    /*************************************************************************************************************/
    /** Title: Contains                                                                                                                                                               
    /** Description:                      
    /*************************************************************************************************************/
    
    public boolean Contains (Atom atom)
    {
    	return this.keyMap.values().contains(atom);
    }
    
    
    /*************************************************************************************************************/
	/** Title: KeySet																				
	/** Description: 				
	/*************************************************************************************************************/
	
	public Set<String> KeySet ()
	{
		return this.keyMap.keySet();
	}
	
	
	/*************************************************************************************************************/
	/** Title: Get																				
	/** Description: 				
	/*************************************************************************************************************/
	
	public Atom Get (Atom atom)
	{
		return this.keyMap.get(atom.toString());
	}
    
    
    /*************************************************************************************************************/
	/** Title: Reset																				
	/** Description: Empty all keyMap info			
	/*************************************************************************************************************/

	public void Reset ()
	{
		this.keyMap.clear();
	}
}
